package com.shunhao.base

import android.annotation.SuppressLint
import android.content.Context
import android.os.Build
import android.util.AttributeSet
import android.webkit.WebSettings
import android.webkit.WebView

/**
 *@author      KangGuiYang
 *创建时间      2020/8/3 11:34
 */
class BaseWebView constructor(context: Context?, attrs: AttributeSet?) :
    WebView(context!!, attrs) {

    constructor(context: Context) : this(context, null) {
        setBackgroundColor(85621)
    }

    init {
        initWebViewSettings()
    }

    @SuppressLint("SetJavaScriptEnabled")
    private fun initWebViewSettings() {
        settings.apply {

            //如果访问的页面中要与Javascript交互，则webView必须设置支持Javascript
            javaScriptEnabled = true

            //支持通过JS打开新窗口  /*设置javascript可以自动弹弹窗*/
            javaScriptCanOpenWindowsAutomatically = true

            /*启用webView中文件访问，这是针对系统文件。android 的资源文件仍可访问*/
            allowFileAccess = true

            allowContentAccess = true
            databaseEnabled = true /*设置是否启用数据库存储API*/

            //setSupportZoom(true);  //支持缩放，默认为true。是下面那个的前提。
            //setBuiltInZoomControls(true);  //设置内置的缩放控件。若为false，则该WebView不可缩放
            //setSupportZoom(true);
            //setBuiltInZoomControls(true);

            setSupportMultipleWindows(true) // 支持多个窗口

            layoutAlgorithm = WebSettings.LayoutAlgorithm.SINGLE_COLUMN //   //自适应屏幕
            useWideViewPort = true // 将图片调整到适合webView的大小
            loadWithOverviewMode = true //  缩放至屏幕的大小

            /*设置是否应启用应用程序缓存API*/
            setAppCacheEnabled(true)
            domStorageEnabled = true

            //启用地理定位，默认为true
            setGeolocationEnabled(true)

            val dir: String = context.getDir("database", Context.MODE_PRIVATE).path
            setGeolocationDatabasePath(dir)

            setAppCacheMaxSize(Long.MAX_VALUE)
            pluginState = WebSettings.PluginState.ON_DEMAND

            cacheMode = WebSettings.LOAD_NO_CACHE  //关闭webView中缓存 目前是关闭了缓存

            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
                mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW
            }

        }
    }

    fun back(): Boolean {
        val canBack = canGoBack()
        if (canBack) {
            goBack()
        }
        return canBack
    }
}